home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / gui / gui4cli.lha / Gui4Cli / Ext / GCSound / src / readargs.h < prev    next >
C/C++ Source or Header  |  1999-04-21  |  2KB  |  66 lines

  1.  
  2.  
  3. // ===================================================================
  4. //     readargs() - Use ReadArgs() to parse a line.. 
  5. //    will allocate a RDArgs structure and parse your command line
  6. //    into the args pointers you provide. Returns a RDArgs structure,
  7. //    - which *MUST* be freed after use by calling the freeargs()
  8. //    function below - or NULL for failure.
  9. // ===================================================================
  10.  
  11. struct RDArgs *readargs (
  12.     LONG  args[],        // these will point to the arguments
  13.     LONG  arg_count,    // No. of args (must be more that max arguments)
  14.     UBYTE *buff,        // the buffer to be parsed
  15.     UBYTE *template,    // the command line template
  16.     struct base *bs)    // for the lib bases
  17. {
  18.    struct RDArgs *rdargs;
  19.    LONG len;
  20.    struct DosLibrary *DOSBase;     // define bases since we don't use
  21.    struct ExecBase *SysBase;       // start-up code from the compiler
  22.    DOSBase=bs->dosbase; SysBase=bs->sysbase;
  23.  
  24.    if (!(rdargs = (struct RDArgs *)AllocDosObject(DOS_RDARGS, NULL)))
  25.       return (NULL);
  26.  
  27.    // RDArgs() wants the string terminated with a '\n'
  28.    len = strlen(buff);
  29.    buff[len] = '\n';
  30.    rdargs->RDA_Source.CS_Buffer = buff;
  31.    rdargs->RDA_Source.CS_Length = len + 1;
  32.    rdargs->RDA_Buffer = NULL;
  33.  
  34.    memset ((char *)args, 0, arg_count * sizeof(char *));
  35.    if (!(rdargs = ReadArgs(template, args, rdargs)))
  36.        FreeDosObject (DOS_RDARGS, rdargs);
  37.  
  38.    buff[len] = '\0'; // restore null
  39.    return (rdargs);  // will be NULL if failure
  40. }
  41.  
  42. // ===================================================================
  43. //     Free rdargs which were allocated with the getargs() above
  44. // ===================================================================
  45.  
  46. void freeargs (struct RDArgs *rdargs, struct base *bs)
  47. {
  48.    struct DosLibrary *DOSBase;
  49.    struct ExecBase *SysBase;
  50.    DOSBase=bs->dosbase; SysBase=bs->sysbase;
  51.  
  52.    if (rdargs)
  53.    {   FreeArgs (rdargs);
  54.        FreeDosObject (DOS_RDARGS, rdargs);
  55.    }
  56. }
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.